package middleware

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

// Options 是一个中间件函数，用于处理 OPTIONS 请求，添加相关响应头
// 然后终止中间件链并结束请求。
func Options() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		if ctx.Request.Method != "OPTIONS" {
			// 如果请求方法不是 OPTIONS，继续处理请求。
			ctx.Next()
		} else {
			// 设置允许跨域请求的源为所有
			ctx.Header("Access-Control-Allow-Origin", "*")
			// 设置允许的请求方法
			ctx.Header("Access-Control-Allow-Methods", "GET,POST,PUT,PATCH,DELETE,OPTIONS")
			// 设置允许的请求头
			ctx.Header("Access-Control-Allow-Headers", "authorization, origin, content-type, accept")
			// 设置允许的 HTTP 方法
			ctx.Header("Allow", "HEAD,GET,POST,PUT,PATCH,DELETE,OPTIONS")
			// 设置响应的内容类型为 JSON
			ctx.Header("Content-Type", "application/json")
			// 以 200 状态码结束请求
			ctx.AbortWithStatus(http.StatusOK)
		}
	}
}
